package zhouyang;

import java.sql.Timestamp;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;

/**
 * @author: 叶子
 * @date: 2022/03/04 18:06
 * 日期类
 * LocalDateTime，阿里开发手册建议使用的类，用于替代calendar
 * 时间加法用plus()，减法用minus()，可以加年、月、星期、日、时、分、秒、nanos
 * LocalDate 加减以日为最小单位
 * LocalTime 加减以时为最大单位
 **/
public class DateDemo {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();//获取Calendar的实例
        System.out.println(cal.getTime());//要转成看得懂时间 打印出来是：Fri Mar 04 17:29:58 CST 2022
        System.out.println(Calendar.MONTH);//2  Calendar月份起始值为0，所以现在月份打印出来是2
        System.out.println(cal.get(Calendar.MONTH));//2 从完整时间中取出数据，这里取出的是月份，也可以取出年、星期、日、时、分、秒
        System.out.println(cal.get(Calendar.WEEK_OF_YEAR));//10,
        LocalDateTime ldt = LocalDateTime.now();//这个也不能new
        System.out.println(LocalDateTime.now().plusDays(3).plusWeeks(3).plusYears(3));//2022-03-04T17:57:20.274
        System.out.println(ldt);//当前时间日期时间
        //2022-03-04T17:32:57.110
        System.out.println(LocalDate.now());//2022-03-04 当前日期不含时间
        System.out.println(LocalDate.now().plusDays(3));//2022-03-07 LocalDate的加法精度大于等于day，可以加月，加年
        System.out.println(LocalTime.now());//17:48:07.827 当前时间不含日期
        System.out.println(LocalTime.now().plusHours(3));//20:52:06.612 LocalTime的加法精度小于等于hour
        System.out.println(LocalTime.now().minusHours(3));//14:53:40.442 减法用minus，同样精度小于等于hour
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy MM dd");//这里的格式 年月日之间都是空格
        LocalDate date =LocalDate.parse("2022 01 03",formatter);
        System.out.println(date);//2022-01-03
        LocalDateTime now = LocalDateTime.now();
        System.out.println(now);//2022-03-04T18:25:47.900
        LocalDate d1 = now.toLocalDate();//日期时间转日期
        System.out.println(d1);//2022-03-04
        LocalTime t1 = now.toLocalTime();//日期时间转时间
        System.out.println(t1);//18:25:47.900
        LocalDateTime ldf = LocalDateTime.of(d1, t1);//日期+时间  转 日期时间
        System.out.println(ldf);//2022-03-04T18:25:47.900
        System.out.println("***");
        Timestamp time = Timestamp.from(Instant.now());//阿里开发手册建议用Instant代替Date,此处的from方法只支持传入Instant变量
        System.out.println(time);//2022-03-04 19:09:36.061
        LocalDateTime localDateTime = time.toLocalDateTime();//Timestamp转LocalDateTime
        System.out.println(localDateTime);//2022-03-04 19:09:36.061
        Timestamp timestamp = Timestamp.valueOf(LocalDateTime.now());//LocalDateTime转Timestamp
        System.out.println(timestamp);//2022-03-04 19:09:36.061

    }
}